package org.zjt.file;

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * Description:
 *
 *      1、ByteBuffer 都会转为 直接内存buffer
 *
 *      2、FileChannel 只有在一次写入 4kb 的整数倍时，才能发挥出实际的性能，这得益于 FileChannel 采用了 ByteBuffer 这样的内存缓冲区，
 *      让我们可以非常精准的控制写盘的大小，这是普通 IO 无法实现的。
 *
 *      3、读写都有 PageCache 缓存。（类似异步了）
 *
 *      4、磁盘->PageCache->用户内存
 *
 *      5、可PageCache 调优
 *
 * @author juntao.zhang
 * Date: 2018-11-28 1:43 PM
 * @see
 */
public class ChannelFileOperator {

    public static void main(String[] args) throws Exception {

        RandomAccessFile file = new RandomAccessFile("/Users/juntao.zhang/dev/workspace/myproject/java-basic/src/main/java/org/zjt/file/ChannelFileOperator-1.data", "rw");


        FileChannel fileChannel = file.getChannel();

        fileChannel.write(ByteBuffer.wrap(new byte[1024]));


        ByteBuffer allocate = ByteBuffer.allocate(1024);
        int read = fileChannel.read(allocate);



    }
}
